Musical performances have become a key component of electronic and multimedia products such as stand-alone video games, computer-based video games, computer-based slide show presentations, computer animation, and other similar products and applications. As a result, music generating devices and music playback devices are now tightly integrated into electronic and multimedia components.
In the past, musical accompaniment for multimedia products was provided in the form of digitized audio streams. While this format allowed recording and accurate reproduction of non-synthesized sounds, it consumed a substantial amount of memory. As a result, the variety of music that could be provided using this approach was limited. Another disadvantage of this approach was that the stored music could not be easily varied. For example, it was generally not possible to change a particular musical part, such as a bass part, without re-recording the entire musical stream.
More recently, it has become quite common to represent music as a stream of discrete music "events." As an example, a particular musical note might be represented as a "note event." The note event is represented by some type of data structure that includes information about the note such as pitch, duration, volume, and timing. Many such music events correspond to actions that might be performed by a keyboardist, such as pressing or releasing a key, pressing or releasing a sustain pedal, activating a pitch bend wheel, changing a volume level, changing a preset, etc.
Music events such as these are typically stored in a sequence that roughly corresponds to the order in which the events occur. Rendering software retrieves each music event and examines it for relevant information such as timing information and information relating the particular device or "instrument" to which the music event applies. The rendering software then sends the music event to the appropriate device at the proper time, where it is rendered.
A computer rendering device can have numeral logical devices or instruments, each of which plays notes having different sounds. For example, one instrument might sound like a trumpet, while another sounds like a violin. Each instrument is assigned a channel, and each music event is similarly designated with channel information. Using such channel designations, an author can designate the instrument or instruments which are to receive any particular music event.
As multimedia software has become more complex, software designers have added corresponding complexity to the rendering of event-based music. Today, software developers need the ability to change music parameters as the music is being rendered, in response to various context changes initiated by a user. For example, it might be desired to immediately change the key of a musical performance in response to a user taking a certain action in a game. Alternatively, it might be desired to change some component of the music, perhaps by adding a drum beat or adding sound effects.
To provide flexibility in implementing such features, authoring programs allow developers to develop discrete event processors, sometimes referred to as "tools," that perform simple actions with respect to a music event. Music events are passed through the event processors, in a defined sequence, in order to produce desired effects. Event processors might be used to change the key of a music performance, or to perform more complex tasks such as creating an "echo" effect. Generally, each event processor accepts a music event, either modifies the music event or takes some further action in response to the particular characteristics of the music event, and then sends the music event on to the next event processor.
Although the concept of event processors such as this is very useful, the process of organizing and managing such event processors can be awkward, particularly when application programs are used to install and organize event processors during multimedia presentations. Thus, there is a need for a straightforward and efficient architecture for organizing music event processors and for passing music events between such event processors. The invention described below meets this need.